16: Intel Edison上のxdk-daemonの動きを把握する
よく訓練されたアップル信者、都元です。昨日のエントリーはこちらです。Intel XDKについて基礎知識は、下記を読んでおいてください。
[Edison]Intel XDK IoT Edisonをつかってプログラムのビルドをしてみる
Intel Edison側の内部の動き
上記エントリー内にある通り、XDKは開発マシン内で動くIDEの一種です。一方、Edison内ではxdk-daemonというプロセスが動いており、XDK上で開発したアプリケーションを受け入れ、アプリケーションプロセスを管理する役割を担っています。
Edison内でxdk-whitelist --add xx.xx.xx.xxというコマンドを入力したと思います。このコマンドは、58888番ポートで待ち受けているxdk-daemonに対して接続を許可するIPアドレスを指定するものです。SSH等のようにパスワードや鍵による認証はありませんので、まじめに運用するEdisonに対しては、利用後xdk-whitelist --remove xx.xx.xx.xxで許可を取り除いておく必要がありますね。
ホワイトリストの設定変更を行った後、設定が反映されない場合はsystemctl restart xdk-daemonコマンドで、プロセスを再起動してみましょう。
XDKからアプリケーションを受け取ったり、package.jsonに基づいたライブラリの導入時には、journaldにログが送信されます。ログの確認は、journalctlコマンドで行います。-fオプションを付与すると、tail -fよろしく、標準出力に最新のログを随時出し続けます。ログには様々なプロセスのログが出てくるため、grep "xdk-daemon"でフィルタをしておくといいかもしれません。
# journalctl -f | grep "xdk-daemon"
ホワイトリストへの登録
まず、ホワイトリスト登録を忘れた時。ログにはこんな出力が。
Dec 16 05:38:03 edison-miyamoto-x xdk-daemon[779]: Loading /opt/xdk-daemon/config.json last modified: Tue Sep 23 2014 20:39:34 GMT+0000 (UTC) Dec 16 05:38:03 edison-miyamoto-x xdk-daemon[779]: UNAUTHORIZED: IP address xx.xx.xx.xx is not in the whitelist (see config.json)
ホワイトリストは/opt/xdk-daemon/config.jsonに記述されるんですね。
# cat /opt/xdk-daemon/config.json { "name":"", "whitelist":[] }
# xdk-whitelist --add xx.xx.xx.xx xx.xx.xx.xx added to whitelist! # cat /opt/xdk-daemon/config.json { "name": "", "whitelist": [ "xx.xx.xx.xx" ] }
XDKからの接続時
特になんてことありませんが。下記ドロップダウンでデバイスを選択した時の挙動です。
Dec 16 05:45:38 edison-miyamoto-x xdk-daemon[779]: Loading /opt/xdk-daemon/config.json last modified: Tue Dec 16 2014 05:39:46 GMT+0000 (UTC) Dec 16 05:45:38 edison-miyamoto-x xdk-daemon[779]: clientAddress: xx.xx.xx.xx
npmパッケージのインストール
例えばプロジェクトのpackage.jsonが以下のようになっていた時、aws-sdkがインストールされます。
{ "name": "OnboardLEDBlink", "description": "", "version": "0.0.0", "main": "main.js", "engines": { "node": ">=0.10.0" }, "dependencies": { "aws-sdk": "*" } }
このボタンをクリックすると、パッケージのダウンロードとインストールが行われます。
アプリケーションをEdisonに流し込みつつ、aws-sdk(及びその依存ライブラリ)をインストールしているのが分かります。
Dec 16 05:53:53 edison-miyamoto-x xdk-daemon[779]: received: {"channel":"clean","message":{"type":"fileInfo","data":{"name":"blink","size":2344960,"type":"bundle"}}} Dec 16 05:53:55 edison-miyamoto-x xdk-daemon[779]: receviing file data Dec 16 05:53:55 edison-miyamoto-x xdk-daemon[779]: /usr/bin/bsdtar Dec 16 05:53:55 edison-miyamoto-x xdk-daemon[779]: rebuild /node_app_slot/ Dec 16 05:53:58 edison-miyamoto-x xdk-daemon[779]: stdout: [email protected] /node_app_slot/node_modules/aws-sdk Dec 16 05:53:58 edison-miyamoto-x xdk-daemon[779]: [email protected] /node_app_slot/node_modules/aws-sdk/node_modules/xml2js Dec 16 05:53:58 edison-miyamoto-x xdk-daemon[779]: [email protected] /node_app_slot/node_modules/aws-sdk/node_modules/xml2js/node_modules/sax Dec 16 05:53:58 edison-miyamoto-x xdk-daemon[779]: [email protected] /node_app_slot/node_modules/aws-sdk/node_modules/xmlbuilder
アプリケーションは/node_app_slotに展開されているのが分かります。パッケージのインストールは不要で、単にアプリケーションを/node_app_slotにアップロードするだけであれば、下記のボタンでOKです。
アプリケーションの起動
アップロードしたアプリケーションを起動するにはこのボタンです。
この時起動ログが大量に流れます。また、プログラム内でconsole.log('MRAA Version: ' + mraa.getVersion());等、console.logで出力する内容もここに出てきているのがわかると思います。
Dec 16 05:56:09 edison-miyamoto-x xdk-daemon[779]: received: {"channel":"command","message":"run"} (略) Dec 16 05:56:09 edison-miyamoto-x xdk-daemon[779]: V8PORT REC Dec 16 05:56:09 edison-miyamoto-x xdk-daemon[779]: stdout: MRAA Version: v0.5.4-34-g4d8b82e
アプリケーションの停止
起動したアプリケーションを停止するにはこのボタンです。
この時のログはこんな感じです。
Dec 16 06:00:26 edison-miyamoto-x xdk-daemon[779]: received: {"channel":"command","message":"stop"} Dec 16 06:00:26 edison-miyamoto-x xdk-daemon[779]: => Stopping App <= Dec 16 06:00:26 edison-miyamoto-x xdk-daemon[779]: null Dec 16 06:00:26 edison-miyamoto-x xdk-daemon[779]: child exited Dec 16 06:00:26 edison-miyamoto-x xdk-daemon[779]: Child process closed
まとめ
XDK(IDE)の操作に対して、Edison上ではこのようなログの出力があります。Edison上のアプリケーションをXDKで開発する時、色々試行錯誤することになると思いますが、このあたりの挙動を押さえておくと、開発がテキパキ進むことでしょう。
明日のエントリーはこちらです。